// 傳統 todolist 寫法
// html
<input type="text" id="input">
<button type="button" id="submit">增加資料</button>
<button class="btns"></button>
<ul id="list">
</ul>
//script
var input = document.querySelector('#input'); // 綁定 input 輸入框
var btnForSubmit = document.querySelector('#submit'); // 綁定 submit 送出按鈕
var list = document.querySelector('#list'); // 綁定 list 列表
btnForSubmit.addEventListener('click', updateData); // 偵聽按鈕事件
// 按鈕事件處理
function updateData() {
var text = input.value; // 宣告 text 將輸入的值填入
var sourceData = list.innerHTML; // 宣告 sourceData 將列表的值填入
var string = sourceData + `<li>${text} // 製作 list 列表
<button class="btns">移除</button> // 加入每個列表的移除按鈕
</li>`;
console.log(sourceData);
list.innerHTML = string; // 將列表的值寫回 html 畫面
var btns = document.querySelectorAll('.btns'); // 監聽 all 所有移除按鈕
btns.forEach(function(btn){ // 跑迴圈監聽列表單項的移除事件
btn.addEventListener('click', removeData);
})
}
function removeData(e) { // 移除資料
e.target.parentNode.remove();
}
操作到畫面的部分:
list.innerHTML = string;
e.target.parentNode.remove();
資料建構的部分:
var text = input.value;
資料跟畫面綁在一起的部分
var sourceData = list.innerHTML;
var string = sourceData + `<li>${text}
<button class="btns">移除</button>
</li>`;
// html 同上
//script
var input = document.querySelector('#input'); // 綁定 input 輸入框
var btnForSubmit = document.querySelector('#submit'); // 綁定 submit 送出按鈕
var list = document.querySelector('#list'); // 綁定 list 列表
btnForSubmit.addEventListener('click', updateData); // 偵聽按鈕事件
// 資料
var data = [
{
text: '這裡有一段話',
},
{
text: '這裡有第二段話',
},
{
text: '這裡有第三段話',
}
];
function updateData() { // 新增資料
data.push({
text: input.value,
});
render(); // 重新執行看到畫面更新
}
function removeData(e) { // 移除資料
console.log(e.target.dataset.id);
data.splice(e.target.dataset.id, 1); // splice(值, 從本身開始的刪除數量)
console.log(data);
render(); // 重新執行看到畫面更新
}
function render () { // 繪製畫面
var string = '';
console.log(data);
data.forEach(function(item, i) {
string = string + `<li>${ item.text }
<button class="btns" data-id="${ i }">移除</button>
</li>`
})
list.innerHTML = string;
var btns = document.querySelectorAll('.btns');
btns.forEach(function(btn){
btn.addEventListener('click', removeData);
})
}
修改後的程式碼內容,操作到畫面的部分:
var text = input.value;
修改後、資料建構的部分:
data.push({
text: input.value,
});
data.splice(e.target.dataset.id, 1);
資料先定義出來